package myList_1009.palycard_1011;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        // 定义一副牌，元素是 Card 对象
        List<Card> 一副牌 = new ArrayList<>();
        // 这副牌现在的空的（empty）
        // 初始化这副牌，一共 52 张
        String[] 所有的花色 = { "♥", "♠", "♦", "♣" };
        // 遍历所有的花色
        for (String suit : 所有的花色) { // 循环 4 次
            // 遍历 A -> K
            for (int rank = 1; rank <= 13; rank++) {    // 循环 13 次
                // 定义一张牌
                Card card = new Card(suit, rank);   // 执行 4 * 13 = 52 次
                // 把牌添加到 这副牌中
                一副牌.add(card);
            }
        }

        // 打印
        System.out.println(一副牌);    // 一副牌.toString()

        // 进行洗牌（shuffle）操作，直接使用官方定义的方法
        // Collections 和 Collection
        // 类似
        // Arrays 和 Array 的关系
        // Collections 提供了很多方便操作 Collection 的工具方法（静态的）
        // Arrays 提供了很多方便操作 数组（Array）的工具方法（静态的）
        Collections.shuffle(一副牌);

        // 打印，洗牌后
        System.out.println(一副牌);    // 一副牌.toString()   牌堆

        // 进行发牌的操作
        // 定义四名玩家，类型都是 List<Card>
        List<Card> playerA = new ArrayList<>(); // 空（empty）的
        List<Card> playerB = new ArrayList<>(); // 空（empty）的
        List<Card> playerC = new ArrayList<>(); // 空（empty）的
        List<Card> playerD = new ArrayList<>(); // 空（empty）的

        System.out.println("发牌前，牌堆的牌数：" + 一副牌.size());
        // 进行发牌的操作，要求最后每名玩家 5 张牌，所以，一共需要发 5 轮牌
        for (int i = 0; i < 5; i++) {
            // 按照 A -> B -> C -> D 的顺序发牌
            // 发牌：从 牌堆顶部（可以是 顺序表的 头部，也可以是顺序表的尾部，只要保持全程保持一致即可）
            // 我们这里规定，顺序表的头部就是牌堆顶部（实际上尾部更好，自己思考为什么）
            // 从 顺序表头部取出一张牌 -> 顺序表的头删操作
            Card card = 一副牌.remove(0);  // 删除 [0] 下标的牌，就是头删
            // 发给对应的玩家 A
            playerA.add(card);  // 这里头插、尾插都可以

            // 发牌给 B
            card = 一副牌.remove(0);
            playerB.add(card);

            // C
            card = 一副牌.remove(0);
            playerC.add(card);

            // D
            card = 一副牌.remove(0);
            playerD.add(card);
        }
        System.out.println("发牌后，牌堆的牌数：" + 一副牌.size());

        // 分别打印每个人手中的牌
        System.out.println(playerA);
        System.out.println(playerB);
        System.out.println(playerC);
        System.out.println(playerD);

        // 大家下来可以自行扩展

        //在一切结束后,把每名玩家手中的牌拿回牌堆，然后重新洗牌
//        for(int i=0;i<5;i++){
//            Card card=playerA.remove(0);
//            一副牌.add(card);
//        }
//        for(int i=0;i<5;i++){
//            Card card=playerB.remove(0);
//            一副牌.add(card);
//        }
//        for(int i=0;i<5;i++){
//            Card card=playerC.remove(0);
//            一副牌.add(card);
//        }
//        for(int i=0;i<5;i++){
//            Card card=playerD.remove(0);
//            一副牌.add(card);
//        }

        //使用addAll方法
        一副牌.addAll(playerA);
        playerA.clear();
        一副牌.addAll(playerA);
        playerB.clear();
        一副牌.addAll(playerA);
        playerC.clear();
        一副牌.addAll(playerA);
        playerD.clear();

        Collections.shuffle(一副牌);
        System.out.println(playerA);
        System.out.println(playerB);
        System.out.println(playerC);
        System.out.println(playerD);
        System.out.println(一副牌);
    }
}

